﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace iMario
{
    public class Monster : Sprite2D
    {
        //Mục đích class Monster
        //  - Biểu diễn và xử lí các vấn đề liên quan đến Monster trong game

        //Danh sách các thuộc tính và ý nghĩa
        static public String ClassName = "Monster";         //Tên lớp đối tượng

        //Danh sách các phương thức và ý nghĩa
        //Hàm dựng mặc định
        //  1. Tham số truyền vào: Không có
        //  2. Giá trị trả về: Không có
        public Monster()
        { 
            //Khởi tạo giá trị cho các thuộc tính
            kind = null;

            isActive = false;

            isDead = false;

            iUpdate = 1;

            nUpdate = 3;

            iTexture = 0;
        }

        //Hàm dựng truyền tham số kèm theo là loại quái vật
        //  1. Tham số truyền vào:
        //      - KindOfSprite _kindOfMonster: Đại diện cho loại sprite
        //  2. Giá trị trả về: Không có
        public Monster(KindOfSprite _kindOfMonster)
        {
            //Khởi tạo giá trị cho các thuộc tính
            kind = _kindOfMonster;

            isActive = false;

            isDead = false;

            iUpdate = 1;

            nUpdate = 3;

            iTexture = 0;
        }

        //Hàm nhân bản thêm 1 đối tượng thuộc lớp Monster và trả về chính đối tượng đã được nhân bản thành công đó
        //  1. Tham số truyền vào: Không có
        //  2. Giá trị trả về: GameEntity
        public override GameEntity Clone()
        {
            GameEntity _mon = new Monster(this.kind);

            return (GameEntity)_mon;
        }

        //Hàm cập nhật trạng thái cho đối tượng thuộc lớp Monster
        //  1. Tham số truyền vào:
        //      - KeyboardState _keyboard: Đại diện cho trạng thái của Keyboard
        //      - MouseState _mouse: Đại diện cho trạng thái của Mouse
        //      - GameTime _gameTime: biến đếm thời gian của game
        //  2. Giá trị trả về: Không có
        public override void Update(KeyboardState _keyboard, MouseState _mouse, GameTime _gameTime)
        {
            //Hướng xử lí
            //Kiểm tra: Nếu giá trị iUpdate bằng giá trị nUpdate => Tiếp tục xử lí các lệnh bên dưới
            //  Kiểm tra: Nếu giá trị cờ hiệu isDead != true => Cập nhật giá trị iTexture của đối tượng monster
            //      Ngược lại => Nếu giá trị iTexture != 2 => iTexture = 2


            //Tiến hành
            //Kiểm tra: Nếu giá trị iUpdate bằng giá trị nUpdate => Tiếp tục xử lí các lệnh bên dưới
            if (iUpdate < nUpdate)
            {
                iUpdate++;
                
                return;
            }

            iUpdate = 1;

            //  Kiểm tra: Nếu giá trị cờ hiệu isDead != true => Cập nhật giá trị iTexture của đối tượng monster
            if (isDead == false)
            {
                iTexture++;
                if (iTexture == 2)
                    iTexture = 0;
            }
            //      Ngược lại => Nếu giá trị iTexture != 2 => iTexture = 2
            else if (iTexture != 2)
                    iTexture = 2;
        }

        //Hàm xử lí thao tác vẽ
        //  1. Tham số truyền vào
        //      - SpriteBatch _spriteBatch
        //      - GameTime _gameTime
        //  2. Giá trị trả về: Không có
        public override void Draw(SpriteBatch _spriteBatch, GameTime _gameTime)
        {
            //Thực hiện vẽ đối tượng kind tại client xác định
            kind.Draw(_spriteBatch, iTexture, new Rectangle(graphicLocation.X, graphicLocation.Y, kind.size.X, kind.size.Y), KindOfSprite.LEFT);
        }
    }
}
